package common;

import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import java.io.File;

public class Music {
    private MediaPlayer mediaPlayer;
    private final String path;

    // 构造方法：传入音乐文件路径
    public Music(String path) {
        this.path = path;
        initPlayer(); // 初始化播放器
    }

    // 初始化音乐播放器
    private void initPlayer() {
        try {
            // 检查文件是否存在
            File musicFile = new File(path);
            if (!musicFile.exists()) {
                System.out.println("音乐文件不存在：" + path);
                return;
            }

            // 创建 Media 对象（需用文件 URI）
            Media media = new Media(musicFile.toURI().toString());
            // 创建播放器
            mediaPlayer = new MediaPlayer(media);

            // 可选：设置循环播放
            mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE); // -1 表示无限循环
        } catch (Exception e) {
            System.out.println("初始化音乐播放器失败：" + e.getMessage());
            mediaPlayer = null;
        }
    }

    // 播放音乐
    public void play(int loopCount) {
        if (mediaPlayer != null) {
            if(loopCount==-1){
                mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
            }
            else {
                mediaPlayer.setCycleCount(loopCount);
            }
            mediaPlayer.play();
        }
    }

    // 暂停音乐
    public void pause() {
        if (mediaPlayer != null) {
            mediaPlayer.pause();
        }
    }

    // 恢复播放音乐
    public void resume() {
        if (mediaPlayer != null) {
            mediaPlayer.play();
        }
    }

    // 停止音乐（重置到开头）
    public void stop() {
        if (mediaPlayer != null) {
            mediaPlayer.stop();
        }
    }

    // 设置音量（0.0 ~ 1.0）
    public void setVolume(double volume) {
        if (mediaPlayer != null && volume >= 0 && volume <= 1) {
            mediaPlayer.setVolume(volume);
        }
    }

    // 获取当前音乐路径
    public String getPath() {
        return path;
    }

    // 释放资源（退出时调用）
    public void dispose() {
        if (mediaPlayer != null) {
            mediaPlayer.dispose();
        }
    }
}
